Distributed computing systems are becoming more prevalent as the demand for processing capacity increases. Various forms of distributed computing systems exist, such as portions of processing capacity of multiple computers being allocated for a common task. Distributed computing systems may comprise different physical processors, portions of different physical processors, multiple operating systems resident on multiple processors, multiple operating systems resident on a single processor, combinations of two or more of any of these, or still other configurations. For example, different sensors, which may or may not include their own processors including processing algorithms, may be used to provide many different types of information, e.g., eye or retina scanning for identification, voice recognition for identification, heartbeat detection, respiration detection, gesture detection, fingerprint recognition, etc.
In many cases of distributed computing systems, it may be desirable or even necessary for different execution environments to communicate securely with each other. While in previous, centralized systems, secure communication was easily managed, providing secure communications in distributed systems, even if those systems are in a single device, is more challenging. One way to provide secure communication is to establish a secure channel between execution environments (i.e., between one or more processors, and/or one or more operating systems, and/or one or more virtual machines, etc., or combinations of any of these). Establishing a secure channel between execution environments traditionally has been cumbersome, using significant design effort, and sometimes key provisioning and secure storage. For example, each execution environment may have a public key and use this key to encrypt information that is then transferred to another execution environment for decryption using a private key. For example, using Secure Sockets Layer (SSL) cryptographic protocol, the execution environments exchange certificates (using certificate authorities and a public key infrastructure) to establish a session key. This protocol involves complex key provisioning of many keys to many entities. Alternatively, a shared memory may be established for each pair of execution environments that are to exchange information. This entails dedicating expensive memory resources to each pair, inhibiting scalability, and may also use memory management that is complex and costly. Further, a memory manager may access the information and/or may remove protection on the information.